package com.blockmeta.bbs.businesslibrary.launch;

import android.text.TextUtils;


import com.blockmeta.bbs.businesslibrary.BuildConfig;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DownloadInfo {
    public String m_myVer;

    public DownloadInfo(String version) {
        m_myVer = version;
    }


    /**
     * 更新并加载本地的bundle配置到内存中,init后会根据init中返回的bundleversion对本地的bundle进行更新
     * 所以就算apk中的bundle不是最新的，也会通过网络下载最新的配置文件更新
     * 只是如果apk中的bundle就是最新的，就不会通过网络进行下载，提高了进入速度
     */
    public void loadLocal() {
        boolean needUpdate = true;
        try {

            //获得用户本地bundle的版本，如果是新安装的，就是空
            String version = BundleManager.getInstance().getBundleVersion();
            //为空的话把当前安装
            //的apk中的bundle更新到file文件中。避免因为配置文件下载失败进入首页出现没有数据问题
            if (!TextUtils.isEmpty(version)) {
                needUpdate = false;
            }
            if (needUpdate) {
                BundleManager.getInstance().copyBundleFile();

            }
            //加载bundle文件到内存
            parseFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static Pattern VersionPattern = Pattern.compile("(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.*(\\d*)");

    public void loadServer(String strUrl, final BundleParseCallback parseCallback) {
        if (!TextUtils.isEmpty(strUrl)) {
            Matcher matcher = VersionPattern.matcher(strUrl.substring(strUrl.lastIndexOf(File.separator) + 1));
            if (matcher.find()) {
                final String version = matcher.group(0);
                String localVersion = BundleManager.getInstance().getBundleVersion();
//                if (version.compareTo(localVersion) > 0 && !Host.MAIN_URL.equals("http://apptest.blockmeta.com")) {//TODO  >0  下载网上的  测试本地的<0
                if (version.compareTo(localVersion) > 0) {//TODO  >0  下载网上的  测试本地的<0
                    BundleManager.getInstance().clearFiles();
                    BundleManager.getInstance().downloadBundleZip(strUrl, new DownLoadCallback() {
                        @Override
                        public void onSuccess() {
                            //修改本地bundle的版本
                            BundleManager.getInstance().putBundleVersion(version);
                            //解析bundle文件数据到内存后进入下一页
                            parseFile();
                            parseCallback.onSuccess();
                        }

                        @Override
                        public void onError() {
                            parseCallback.onError();
                        }
                    });

                } else {
                    parseCallback.onSuccess();
                }

            } else {
                parseCallback.onSuccess();
            }
        } else {
            parseCallback.onSuccess();
        }


    }

    public interface DownLoadCallback {
        void onSuccess();

        void onError();
    }

    public interface BundleParseCallback {
        void onSuccess();

        void onError();
    }


    protected void parseFile() {
        //PROD 可以读取不同环境下的配置文件
        BundleManager.getInstance().generateMapping(BuildConfig.DEBUG ? "DEV" : "PROD");
    }

}
